/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package genericos;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;

/**
 * Clase que realiza la conexion a la base de vConsulting.
 * @author Fernando Ramírez Martínez <Servicios Disaster Recovery>
 */
public class Conexion {

    static String[] dir = {"C://userpass.txt", "//root//userpass.txt", "D://userpass.txt", "//home//userpass.txt", "E://userpass.txt", "//etc//userpass.txt","C://confDB//userpass.txt","//home//confDB//userpass.txt"};
/**
 * Método que ontiene el usuario y el password de la base de datos consultada.
 * @return un arreglo de Strings con las posiciones dadas.
 */
    public static String[] userpass() {
        String[] claves = new String[2];
        int i = 0;
        File f = null;
        f = buscador(f);

        if (f != null && f.canWrite() == false) {
            //se lee sabiendo que esta encriptado
            // System.out.println("Corrida donde ya hay seguridad empezada");
            try {
                BufferedReader bufferedReader = new BufferedReader(new FileReader(f));
                String line = "";
                while ((line = bufferedReader.readLine()) != null) {

                    claves[i] = JSPassGenerator.desencripta(line);
                    i++;
                }
                bufferedReader.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
            // System.out.println("Corrida donde ya hay seguridad terminada");
        }
        if (f != null && f.canWrite() == true) {
            // System.out.println("Corrida donde se pone seguridad iniciada");
            //realiza seguridad antes de volverlo solo lectura.
            try {
                BufferedReader bufferedReader = new BufferedReader(new FileReader(f));
                String line = "";
                while ((line = bufferedReader.readLine()) != null) {
                    claves[i] = JSPassGenerator.encripta(line);
                    i++;
                }
                bufferedReader.close();
                //System.out.println("Leido compleamente y comienza la escritura");
                BufferedWriter bw = new BufferedWriter(new FileWriter(f));
                bw.write("");
                bw.write(claves[0]);
                bw.write(claves[1]);
                bw.close();
                // System.out.println("Se ha escito por completo bajo cifrado");
                line = claves[0];
                claves[0] = JSPassGenerator.desencripta(line);
                line = claves[1];
                claves[1] = JSPassGenerator.desencripta(line);
                f.setReadOnly();
                //System.out.println("Ya es un archivo de solo lectura");            
            } catch (Exception e) {
                e.printStackTrace();
            }
            
        }
        if (f == null) {
            JOptionPane.showMessageDialog(null, "Archivo userpass.txt no encontrado: \n Se ha creado un archivo para editar en C://confDB// o //home//confDB// ", "Error 1", JOptionPane.ERROR_MESSAGE);
            arreglar();
        }
        return claves;

    }
    /**
     * Método que crea una carpeta especial en caso de no existir el archivo de arranque.
     */
    public static void arreglar(){
        File f=new File("C://");
        if(f.exists()){
            try {
                f=new File("C://confDB//");
                f.mkdir();
                f=new File("C://confDB//userpass.txt");
                f.createNewFile();
            } catch (IOException ex) {
                Logger.getLogger(Conexion.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        else{
            try {
                f=new File("//home//confDB//");
                f.mkdir();
                f=new File("//home//confDB//userpass.txt");
                f.createNewFile();
            } catch (IOException ex) {
                Logger.getLogger(Conexion.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
    /**
     * Método que indaga acerca de donde encontrar el archivo para realizar la conexion a la BD.
     * @param f archivo File a buscar
     * @return el objeto File donde existe el fichero.
     */
    public static File buscador(File f) {
        for (int j = 0; j < dir.length; j++) {
            f = new File(dir[j]);
            if ((f.exists()) == true) {
                break;
            } else {
                f = null;
            }
        }
        return f;
    }

}
